МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САП
Використання потоків в Java
Методичні матеріали
до лабораторної роботи № 3 з курсу:
“Об’єктно-орієнтоване програмування”
для студентів базового напрямку
6.0804 “Комп’ютерні науки”
ЗАТВЕРДЖЕНО
на засіданні кафедри
“Системи автоматизованого проектування”
Протокол №
від
ЛЬВІВ 2007
Використання потоків в Java. Методичні матеріали до лабораторної роботи № 3 з курсу: “Об’єктно-орієнтоване програмування” для студентів базового напрямку 6.0804 “Комп’ютерні науки”.
Укладачі:
Макар В.М., доцент, к.т.н.
Загарюк Р.В., асистент.
Відповідальний за випуск:
Рецензенти:
1. МЕТА РОБОТИ
Метою роботи є придбання навиків роботи з потоками при програмуванні на мові Java.
2.ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ
2.1. РEАЛІЗАЦІЯ ПОТОКІВ В JAVA
Мова Java є однією з небагатьох мов програмування, які містять засоби підтримки потоків. У мові Java потоки звичайно використовуються для того, щоб аплети могли виконувати якісь дії в той час, як Web-браузер продовжує свою роботу, проте потоки можна застосувати в будь-якій програмі при необхідності паралельного виконання декількох завдань.
Так, наприклад, при створенні колективом програмістів великого і складного програмного продукту, як правило, окремі модулі програми розробляються паралельно окремими програмістами або групами програмістів. В цьому випадку процес розробки кожного модуля програми можна представити як окремий потік.
Реалізація використання потоків в програмах на мові може виконуватися двома способами:
- розширенням класу Thread;
- реалізацією інтерфейсу Runnable.
При першому способі клас стає потоковим, якщо він створений як розширення класу Thread, який визначений в пакеті java.lang, наприклад:
public class GreatRace extends Thread
При цьому стають доступними всі методи потоків. Звичайно, коли необхідно, щоб даний клас є розширенням деякого іншого класу і в ньому необхідно реалізувати потоки, попередній підхід не можна використовувати, оскільки, як вже указувалося, мові Java немає множинного спадкоємства. Для вирішення цієї проблеми для даного класу потрібно реалізувати інтерфейс Runnable, наприклад:
· public class GreatRace extends Applet implements Runnable
· Інтерфейс Runnable має тільки один метод public void run(). Насправді клас Thread також реалізує цей інтерфейс, проте стандартна реалізація run() у класі Thread не виконує ніяких операцій. Необхідно або розширити клас Thread, щоб включити в нього новий метод run(), або створити об'єкт Runnnable і передати його конструктору потоку. Коли створюється клас, що реалізовує інтерфейс Runnable, цей клас повинен перевизначити метод run(). Саме цей метод виконує фактичну роботу, покладену на конкретний потік.
· Створити потік можна за допомогою одного з наступних конструкторів:
· public Thread()
· public Thread(String name)
public Thread(Runnable target)
· public Thread(Runnable target, String name)
public Thread(ThreadGroup group, String name)
· public Thread(ThreadGroup group, Runnable target)
· public Thread(ThreadGroup group, Runnable target, String name)
У першому конструкторі створюється потік, який використовує самого себе як такий інтерфейс Runnable. У решті конструкторів використовувані параметри мають наступний сенс:
name - ім'я, яке привласнюється новому потоку;
· target - визначення цільового об'єкту, який використовуватиметься новим об'єктом Thread при запуску потоків. Якщо опустити цей параметр або привласнити йому значення null, новий об'єкт Thread запускатиме потоки за допомогою виклику методу run() поточного об'єкту Thread. Якщо при створенні нового об'єкту Thread указується цільовий об'єкт, то для запуску нових процесів він викликатиме метод run() вказаного цільового об'єкту;
· group - призначений для приміщення нового об'єкту Thread в дерево об'єктів даного класу. Якщо опустити даний параметр або привласнити йому значення null, новий об'єкт класу Thread стане членом поточної групи потоків...